ACTOR PrismProjectile1 : FastProjectile
{
  Speed 300
  Radius 15
  Height 12
  Damage 100
  -RIPPER
  +FORCERADIUSDMG
  +BLOODLESSIMPACT
  +DONTBLAST
  DamageType Fire
  DeathSound "Weapons/StachanovHit"
  MissileType "PrismTrail1"
  MissileHeight 12
  states
  {
  Spawn:
    TNT1 A 0
    TNT1 A 1 A_PlaySound("Weapons/StachanovFly",5,1.0,1)
    Loop
  Death:
    TNT1 A 0 A_PlaySound("Weapons/PrismHit")
    TNT1 A 0 A_PlaySound("Weapons/PushkaExp",5)
    TNT1 AAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("ObeliskTrailSpark",frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(5.0,20.0),0,frandom(-20.0,20.0),frandom(0.0,360.0),SXF_CLIENTSIDE,0)
	TNT1 AAAAAAAAAAAA 0 A_SpawnItemEx("PrismBlast",0,0,0,frandom(100.0,120.0),0,frandom(10.0,-10.0),frandom(0.0,360.0),SXF_TRANSFERPOINTERS,0)
	TNT1 A 0 A_SpawnItemEx("PrismExplode",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
    TNT1 A 0 A_SpawnItemEx("PushkaExplode",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS,0)
    TNT1 A 0 A_Explode(100,256,0,1)
    TNT1 A 0 A_Explode(100,256,1)
	TNT1 BCD 5
    stop
  }
}

ACTOR PrismProjectile2 : PrismProjectile1
{
  Speed 325
  Damage 125
  states
  {
  Death:
    TNT1 A 0 A_PlaySound("Weapons/PrismHit")
    TNT1 A 0 A_PlaySound("Weapons/PushkaExp",5)
    TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("ObeliskTrailSpark",frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(5.0,20.0),0,frandom(-20.0,20.0),frandom(0.0,360.0),SXF_CLIENTSIDE,0)
	TNT1 AAAAAAAAAAAAAA 0 A_SpawnItemEx("PrismBlast",0,0,0,frandom(100.0,120.0),0,frandom(10.0,-10.0),frandom(0.0,360.0),SXF_TRANSFERPOINTERS,0)
	TNT1 A 0 A_SpawnItemEx("PrismExplode",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
    TNT1 A 0 A_SpawnItemEx("PushkaExplode",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS,0)
    TNT1 A 0 A_Explode(200,256,0,1)
    TNT1 A 0 A_Explode(100,256,1)
	TNT1 BCD 5
    stop
  }
}

ACTOR PrismProjectile3 : PrismProjectile1
{
  Speed 350
  Damage 150
  states
  {
  Death:
    TNT1 A 0 A_PlaySound("Weapons/PrismHit")
    TNT1 A 0 A_PlaySound("Weapons/PushkaExp",5)
    TNT1 AAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("ObeliskTrailSpark",frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(5.0,20.0),0,frandom(-20.0,20.0),frandom(0.0,360.0),SXF_CLIENTSIDE,0)
	TNT1 AAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("PrismBlast",0,0,0,frandom(100.0,120.0),0,frandom(10.0,-10.0),frandom(0.0,360.0),SXF_TRANSFERPOINTERS,0)
	TNT1 A 0 A_SpawnItemEx("PrismExplode",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
    TNT1 A 0 A_SpawnItemEx("PushkaExplode",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS,0)
    TNT1 A 0 A_Explode(300,256,0,1)
    TNT1 A 0 A_Explode(100,256,1)
	TNT1 BCD 5
    stop
  }
}
ACTOR PrismProjectileMinor : PrismProjectile1
{
  Speed 300
  Damage 20
  MissileType "PrismTrail2"
  States
  {
  Death:
    TNT1 A 0 A_PlaySound("Weapons/PrismHit")
    TNT1 A 0 A_PlaySound("Weapons/PushkaExp",5)
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ObeliskTrailSpark",frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(5.0,20.0),0,frandom(-20.0,20.0),frandom(0.0,360.0),SXF_CLIENTSIDE,0)
	TNT1 AAA 0 A_SpawnItemEx("PrismBlast2",0,0,0,frandom(100.0,120.0),0,frandom(10.0,-10.0),frandom(0.0,360.0),SXF_TRANSFERPOINTERS,0)
    TNT1 A 0 A_SpawnItemEx("MissileExplode",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS,0)
    TNT1 A 0 A_Explode(70,256,0,1)
    TNT1 A 0 A_Explode(70,256,1)
	TNT1 BCD 4
    stop
  }
}

ACTOR PrismExplode
{
  Renderstyle Add
  Scale 1.2
  Alpha 0.99
  +CLIENTSIDEONLY
  +NOINTERACTION
  +NOGRAVITY
  states
  {
  Spawn:
    YAE3 ABCDEFGHIJKLMNOPQRS 1 bright A_FadeOut(0.05)
    stop
  }
}

ACTOR PrismTrail1
{
  RenderStyle Add
  Scale 0.1
  Alpha 0.99
  +CLIENTSIDEONLY
  +NOINTERACTION
  +NOGRAVITY
  States
  {
  Spawn:
    YAE4 A 1 NoDelay Bright A_SpawnItemEx("ObeliskTrailSpark", random(4,-4), random(4,-4), random(4,-4), 0, 0, 0, 0, SXF_CLIENTSIDE, 128)
  Trolololo:
    YAE4 A 0 A_SetScale(ScaleX +0.005, ScaleY +0.005)
    YAE4 A 1 Bright A_JumpIf(ScaleX >= 0.125, "Lolololo")
	Loop
  Lolololo:
    YAE4 A 0 A_JumpIf(ScaleX <= 0, "NULL")
    YAE4 A 0 A_SetScale(ScaleX -0.005, ScaleY -0.005)
    YAE4 A 1 bright A_FadeOut(0.05)
    Loop
  }
}

ACTOR PrismTrail2 : PrismTrail1
{
  RenderStyle Add
  Scale 0.1
  Alpha 0.99
  +NOINTERACTION
  +NOGRAVITY
  States
  {
  Spawn:
    YAE4 A 1 NoDelay Bright A_SpawnItemEx("ObeliskTrailSpark", random(4,-4), random(4,-4), random(4,-4), 0, 0, 0, 0, SXF_CLIENTSIDE, 128)
  Trolololo:
    YAE4 A 0 A_JumpIf(ScaleY <= 0, "NULL")
    YAE4 A 0 A_SetScale(ScaleX -0.025, ScaleY -0.025)
    YAE4 A 1 bright A_FadeOut(0.25)
    Loop
  }
}

ACTOR PrismBlast : PrismProjectile1
{
  Damage 15
  MissileType "PrismTrail1"
  states
  {
  Spawn:
    TNT1 A random(2,6)
    Stop
  Death:
    TNT1 A 0 A_PlaySound("Weapons/PrismHit")
    TNT1 A 0 A_PlaySound("Weapons/BustExplo",5)
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ObeliskTrailSpark",frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(5.0,20.0),0,frandom(-20.0,20.0),frandom(0.0,360.0),SXF_CLIENTSIDE,0)
	TNT1 A 0 A_SpawnItemEx("MissileExplode",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
    TNT1 A 0 A_Explode(250,192,0,1) //Because the original prism's carnage came from the burst, dunno why, but I am gonna copy that! :P
    TNT1 BCD 4
    stop
  }
}

ACTOR PrismBlast2 : PrismProjectile1
{
  Damage 15
  MissileType "PrismTrail2"
  states
  {
  Spawn:
    TNT1 A random(2,6)
    Stop
  Death:
    TNT1 A 0 A_PlaySound("Weapons/PrismHit")
    TNT1 A 0 A_PlaySound("Weapons/BustExplo",5)
    TNT1 AAAAAAAAAA 0 A_SpawnItemEx("ObeliskTrailSpark",frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(20.0,-20.0),frandom(5.0,20.0),0,frandom(-20.0,20.0),frandom(0.0,360.0),SXF_CLIENTSIDE,0)
	TNT1 A 0 A_SpawnItemEx("MissileExplode",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
    TNT1 A 0 A_Explode(250,192,0,1) //Because the original prism's carnage came from the burst, dunno why, but I am gonna copy that! :P
    TNT1 BCD 4
    stop
  }
}

Actor BarszczProjectile : FastProjectile
{
  Radius 9
  Height 12
  Speed 50
  Damage 0
  Projectile
  +NOGRAVITY
  +RIPPER
  -THRUGHOST
  +DONTSPLASH
  +EXPLODEONWATER
  +FORCERADIUSDMG
  +BLOODLESSIMPACT
  ProjectileKickback 0
  DeathSound ""
  Obituary "In soviet russia, %o, %k's borscht eats YOU!"
  MissileType "Barszcz_TrailSpawner"
  MissileHeight 12
  States
  {
  Spawn:
    TNT1 AA 0 ThrustThingZ(0,frandom(10.0,15.0),0,1)
  Looplet:
    TNT1 A 0 A_Explode(30,64,0)
    TNT1 A 1 ThrustThingZ(0,frandom(-4.0,-5.0),0,1)
    Loop
  Death:
    TNT1 A 0 A_Quake (2, 10, 0, 128, none)
    TNT1 A 0 A_Explode(70,128,0)
    TNT1 A 0 A_AlertMonsters
    TNT1 A 0 A_SpawnItemEx("Barszcz_Impact",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
    TNT1 B 28
    Stop
  }
}

Actor Barszcz_TrailSpawner
{
	+CLIENTSIDEONLY
	+NOINTERACTION
	+NOGRAVITY
	States
	{
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("Barszcz_Trail",random(5,-5),random(5,-5),random(5,-5),frandom(0.1,0.2),frandom(0.1,0.2),frandom(-0.3,0.1),random(0,359),0,80)
	Stop
	}
}

Actor Barszcz_Trail
{
	+CLIENTSIDEONLY
	+NoInteraction
	+ForceXYBillboard
	Alpha 0.99
	RenderStyle Add
	Scale 0
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetScale(ScaleX+FRandom(0.2, 0.1))
			Goto SetSelect
		SetSelect:
			TNT1 A 0 A_Jump(255,"Set1","Set2","Set3","Set4","Set5","Set6","Set7","Set8","Set9","Set0")
			Goto SetSelect
		Set1:
			1SPT ABCDEFGHIJKLMNOPQRS 1 A_GiveInventory("Barszcz_Expander")
			Stop
		Set2:
			2SPT ABCDEFGHIJKLMNOPQR 1 A_GiveInventory("Barszcz_Expander")
			Stop
		Set3:
			3SPT ABCDEFGHIJKLM 1 A_GiveInventory("Barszcz_Expander")
			Stop
		Set4:
			4SPT ABCDEFGHIJKLMNOPQRS 1 A_GiveInventory("Barszcz_Expander")
			Stop
		Set5:
			5SPT ABCDEFGHIJKLMNOPQRS 1 A_GiveInventory("Barszcz_Expander")
			Stop
		Set6:
			6SPT ABCDEFGHIJKLMNOPQRS 1 A_GiveInventory("Barszcz_Expander")
			Stop
		Set7:
			7SPT ABCDEFGHIJKLMNOPQR 1 A_GiveInventory("Barszcz_Expander")
			Stop
		Set8:
			8SPT ABCDEFGHIJKLMNOPQR 1 A_GiveInventory("Barszcz_Expander")
			Stop
		Set9:
			9SPT ABCDEFGHIJKLM 1 A_GiveInventory("Barszcz_Expander")
			Stop
		Set0:
			0SPT ABCDEFGHIJKLM 1 A_GiveInventory("Barszcz_Expander")
			Stop
	}
}

Actor Barszcz_Expander : CustomInventory
{
	+ClientSideOnly
	+Inventory.Autoactivate
	+Inventory.Alwayspickup
	Inventory.Amount 0
	States
	{
	Spawn:
	TNT1 A -1
	Stop
	Use:
	TNT1 A 0 A_SetScale(ScaleX + FRandom(0.0025, 0.0015))
	TNT1 A 0 A_FadeOut(random(0.05,0.025))
	Stop
	}
}

Actor Barszcz_Blast
{
	+ClientSideOnly
	+NoInteraction
	+ForceXYBillboard
	Alpha 0.99
	RenderStyle Add
	Scale 0
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetScale(ScaleX+FRandom(1.00, 1.25))
			Goto SetSelect
		SetSelect:
			TNT1 A 0 A_Jump(255,"Set1","Set2","Set3","Set4","Set5","Set6","Set7","Set8","Set9","Set0")
			Goto SetSelect
		Set1:
			1SPT ABCDEFGHIJKLMNOPQRS 1 A_GiveInventory("Barszcz_Expander2")
			Stop
		Set2:
			2SPT ABCDEFGHIJKLMNOPQR 1 A_GiveInventory("Barszcz_Expander2")
			Stop
		Set3:
			3SPT ABCDEFGHIJKLM 1 A_GiveInventory("Barszcz_Expander2")
			Stop
		Set4:
			4SPT ABCDEFGHIJKLMNOPQRS 1 A_GiveInventory("Barszcz_Expander2")
			Stop
		Set5:
			5SPT ABCDEFGHIJKLMNOPQRS 1 A_GiveInventory("Barszcz_Expander2")
			Stop
		Set6:
			6SPT ABCDEFGHIJKLMNOPQRS 1 A_GiveInventory("Barszcz_Expander2")
			Stop
		Set7:
			7SPT ABCDEFGHIJKLMNOPQR 1 A_GiveInventory("Barszcz_Expander2")
			Stop
		Set8:
			8SPT ABCDEFGHIJKLMNOPQR 1 A_GiveInventory("Barszcz_Expander2")
			Stop
		Set9:
			9SPT ABCDEFGHIJKLM 1 A_GiveInventory("Barszcz_Expander2")
			Stop
		Set0:
			0SPT ABCDEFGHIJKLM 1 A_GiveInventory("Barszcz_Expander2")
			Stop
	}
}

Actor Barszcz_Expander2 : Barszcz_Expander
{
	States
	{
	Use:
	TNT1 A 0 A_SetScale(ScaleX + FRandom(0.005, 0.0075))
	TNT1 A 0 A_FadeOut(random(0.035,0.025))
	Stop
	}
}

Actor Barszcz_Impact
{
	+NOINTERACTION
	+NOGRAVITY
	States
	{
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_SpawnItemEx("Barszcz_Blast_BlastSpawner")
	TNT1 A 0 A_SpawnItemEx("Barszcz_Blast_Spawner")
	TNT1 A 19
	Stop
	}
}

Actor Barszcz_Blast_BlastSpawner
{
	+NOINTERACTION
	+NOGRAVITY
	ReactionTime 10
	States
	{
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_Countdown
	TNT1 A 0 A_SpawnItemEx("Barszcz_Blast",random(60,-60),random(60,-60),random(50,-50),frandom(3.0,1.0),frandom(3.0,1.0),frandom(-1.0,3.0),random(0,359),0,20)
	Loop
	Death:
	Stop
	}
}

Actor Barszcz_Blast_Spawner
{
	+NOINTERACTION
	+NOGRAVITY
	ReactionTime 8
	States
	{
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_Countdown
	TNT1 A random(1,2) A_SpawnItemEx("Barszcz_Blast",random(25,-25),random(25,-25),random(25,-25),frandom(0.5,1.0),frandom(0.5,1.0),frandom(-0.5,1.0),random(0,359),0,20)
	Loop
	Death:
	Stop
	}
}